@  orders.dbfOrder Information__ri_delete_orders()__ri_update_orders()__ri_insert_orders() valorder()order_idst have at leasuser_lev.dbfgroup_id)User Level (Security) Information __ri_delete_user_level() __ri_update_user_level()supplier.dbfsupplier_i&Inventory Supplier Information__ri_delete_supplier()__ri_update_supplier()shippers.dbfshipper_idShipper Lookup Table__ri_delete_shippers()__ri_update_shippers()products.dbfproduct_id%Product Inventory Information__ri_delete_products()__ri_update_products()__ri_insert_products()orditems.dbf#Order Line Item Information&__ri_update_order_line_items()&__ri_insert_order_line_items()employee.dbfemployee_iEmployee Information__ri_delete_employee()__ri_update_employee()__ri_insert_employee()customer.dbfcustomer_iCustomer Information__ri_delete_customer()__ri_update_customer()category.dbfcategory_i%Product Category Lookup Table__ri_delete_category()__ri_update_category()9&-#sum_unit_priceMY NOCPTRANS2&-#Orders.order_date MD)&- #exp_1 MC(6).0$(, / %d '+orders,order_line_items*SELECT STR(YEAR(Orders.order_date),4)+STR(MONTH(Orders.order_date),2), Orders.order_date, SUM(Order_line_items.unit_price) FROM tastrade!orders, tastrade!order_line_items WHERE Orders.order_id = Order_line_items.order_id GROUP BY 1, Orders.order_date) 3&-#Supplier.phone MC(24):&-#Supplier.contact_name MC(30)3&-#Customer.phone MC(24)2setup.dbfHolds unique keys##Name of table's primary keyThe next unique key1&-#Category.picture MG/&-#Employee.notes MM&&Contact name (e.g. Bill Scott)11Customer contact's title (e.g. President)22Customer's address (e.g. 1060 Main Street)++Customer's city (e.g. Bloomingdale)))Customer's region/state (e.g. CA)$$Customer's postal (zip) codeCustomer CountryCustomer's phone numberCustomer's fax number+"Customer's normal discount  0Customer's sales region:&-#Supplier.company_name MC(40)5&-#Category.description MMInternal group IDDescription of group11Name of action to perform when logging in:&-#Customer.contact_name MC(30)4 employee_iemployeeemployee_i+ newid()Internal supplier ID6&-#Employee.extension MC(4)Contact's nameContact's titleSupplier's addressSupplier's citySupplier region$$Supplier's postal (zip) codeSupplier's countrySupplier's phone numberSupplier's fax number:&-#Customer.company_name MC(40)4 shipper_idshippersshipper_id* newid()Internal shipper ID8&-#Employee.first_name MC(10);&-#Category.category_name MC(15)4 supplier_isuppliersupplier_i* newid()Internal product ID&&ID of supplier of this product44ID of category to which this product belongs7&-#Employee.last_name MC(20)English name of productQuantity in each unit Unit priceUnit cost) Number of units in stock  0) Number of units on order  0Reorder level  0--True if product has been discontinued. order_idordersorder_id4 category_icategorycategory_i4 customer_icustomercustomer_iInternal order IDInternal product IDUnit price of productQuantity  12 group_iduser_levelgroup_id4 product_idproductsproduct_id3&-#Employee.title MC(30). newid()Unique ID of this order5&-#Customer.country MC(15)  DATE()Order datefSupplier's company name  .NOT.EMPTY(company_name)' "Company name cannot be empty."4&-#Customer.region MC(15)5&-#tastrade!orders.paid ML''ID of customer who placed orderShipper IDK newid("order_number").Order number (automatically generated)Ship to nameShip to addressShip to cityShip to region!!Ship to postal (zip) codeShip to country'Order discount percent  0Total freight charges} DATE()+7 deliver_by=>order_date+ "Cannot be earlier than Order Date"$Date order must be deliveredMiscellaneous notes,Employee ID defaultemployee()ployee()/Customer's minimum allowed order amount$ min_order_amt<=max_order_amtR "Minimum order amount must be less than or equal to maximum order amount."+ newid()Internal employee ID2&-#Customer.city MC(15)Employee's first nameEmployee's job titleEmployee's birth date Date employee was hiredEmployee's addressEmployee's city$$Employee's region (e.g., TX)$$Employee's postal (zip) codeEmployee country$$Employee's home phone number--Emploee's home phone number extension%%Internal group id of employee11Sales region employee is responsibile for-Employee's password "Tastrade"Employee's photoNotes about employeeXCustomer ID .NOT.EMPTY(customer_id)& "Customer ID cannot be empty."5&-#Customer.address MC(60)+ newid()Internal category ID3&-#Orders.deliver_by* MY3&-#Orders.discount MN(2)Category descriptionCategory picture .0$(, / %d '+supplier*SELECT Supplier.company_name, Supplier.contact_name, Supplier.phone FROM tastrade!supplier ORDER BY Supplier.company_name, Supplier.contact_name) h.0$(, / %d '*SELECT STR(YEAR(Orders.order_date), 4) + STR(MONTH(Orders.order_date), 2), SUM(Order_line_items.unit_price) AS sum_unit_price FROM tastrade!Orders, tastrade!Order_Line_Items WHERE Orders.order_id = Order_line_items.order_id GROUP BY 1) +rectclass)&- #exp_1 MC(6)8&-#Orders.ship_to_city MC(15)9&-#sum_unit_priceMY NOCPTRANS .0$(, / %d '+customer*SELECT Customer.company_name, Customer.contact_name, Customer.phone FROM tastrade!customer ORDER BY Customer.company_name, Customer.contact_name) .0$(, / %d '+categoryd*SELECT Category.category_name, Category.description, Category.picture FROM tastrade!category) cShipper company name  .NOT.EMPTY(company_name)' "Company name cannot be empty."cFull name of product  .NOT.EMPTY(product_name)' "Product name cannot be empty."]Employee's last name .NOT.EMPTY(last_name)$ "Last name cannot be empty."; tastrade.h,..\..\foxpro.hR, strings.h,;&-"#TASTRADE!ORDERS.deliver_by MD;&-"#TASTRADE!ORDERS.order_date MD<&- #TASTRADE!ORDERS.order_id MC(6)q*Company name (e.g. MJR Associates)  .NOT.EMPTY(company_name)' "Company name cannot be empty."k 8Name:Category name! .NOT.EMPTY(category_name)( "Category name cannot be empty."}.0$(, / %d '+employee*SELECT Employee.title, Employee.last_name, Employee.first_name, Employee.extension, Employee.notes FROM tastrade!employee WHERE Employee.title = ?cTitle ORDER BY Employee.title, Employee.last_name, Employee.first_name, Employee.extension) cTitle,'C' 8&-#Orders.ship_to_name MC(40).0$(, / %d '+Z*SELECT Shippers.company_name FROM tastrade!Shippers ORDER BY Shippers.company_name) ) 2&-#Orders.order_date MD1&-#COMPANY_NAME MC(40)name :&-#Products.product_name MC(40):&-#Shippers.company_name MC(40)&.0$(, / %d '+*SELECT Products.product_name, Products.quantity_in_unit, Products.unit_price, Products.unit_cost FROM tastrade!Products ORDER BY Products.product_name, Products.quantity_in_unit) ) 7&-#Orders.order_number MC(6)1&-#PRODUCT_NAME MC(40)name 9&-#Customer.postal_code MC(10)5&-#QUANTITY_IN_UNIT MC(20)uni:&-#Customer.company_name MC(40)5&-#UNIT_PRICEMY NOCPTRANS@&-!#Order_line_items.quantityMN(12,3)4&-#UNIT_COSTMY NOCPTRANS.0$(, / %d ':+orders,order_line_items,customer,shippers,productsZ*SELECT Orders.order_number, Orders.order_date, Orders.ship_to_name, Orders.ship_to_address, Orders.ship_to_city, Orders.ship_to_region, Orders.ship_to_postal_code, Orders.ship_to_country, Orders.discount, Orders.freight, Order_line_items.unit_price, Order_line_items.quantity, Customer.company_name, Customer.address, Customer.city, Customer.region, Customer.postal_code, Customer.country, Shippers.company_name, Products.product_name FROM tastrade!orders, tastrade!order_line_items, tastrade!customer, tastrade!shippers, tastrade!products WHERE Orders.order_id = Order_line_items.order_id AND Orders.customer_id = Customer.customer_id AND Orders.shipper_id = Shippers.shipper_id AND Order_line_items.product_id = Products.product_id AND Orders.order_date BETWEEN ?dDateFrom AND ?dDateTo ORDER BY Orders.order_date, Orders.order_number)! dDateFrom,'D';dDateTo,'D' *&-#custtotal MY,&-#country MC(15)1&-#company_name MC(40)A&-%#tastrade!customer.customer_id MC(6)+&-#ordertotal MY/&-#customer_id MC(6)&&- #exp_1 ML;&-#Orders.ship_to_address MC(60):&-#Orders.ship_to_region MC(15)?&-"#Orders.ship_to_postal_code MC(10);&-#Orders.ship_to_country MC(15)9&-#Orders.freightMY NOCPTRANSF&-##Order_line_items.unit_priceMY NOCPTRANS@&-!#Order_line_items.quantityMN(12,3)<&-##Order_line_items.unit_price MYNOCPTRANS:&-#Products.product_name MC(40)=&- MY$#Order_line_items.unit_price*it_price*/Customer's maximum allowed order amount$ max_order_amt=>min_order_amtU "Maximum order amount must be greater than or equal to minimum order amount."H&-,#tastrade!order_line_items.product_id MC(6) 2!%VqtUR TCW%C DTCCf[TCf TTC REPROCESSvGM(%CSETUP Qtastrade!setupF"%Csetupkey_name- %CS)T">CCCgC>ZZ F GM( BUTCALIASLCALIASLCIDLCOLDREPROCESS LNOLDAREATASTRADESETUPVALUE%C C < B TTCWTC]%Qtastrade!customer%C customer_i!TC.max_order_amt Q Qtastrade!orderso_ordersQ order_line_itemsQC  {Gz?  Q     orderamounts K( QQ F BU TCCUSTOMERIDLYMAXORDERAMOUNT LYTOTALORDERSLCCUSTOMERALIAS LNOLDAREATASTRADE_ORDERSSUM UNIT_PRICEQUANTITYDISCOUNTFREIGHT TOTALORDERAORDER_IDORDER_LINE_ITEMSB CUSTOMER_IDPAID ORDERAMOUNTS' %C'7B TCW %Corder_line_items &Qtastrade!order_line_items TaCTCCorder_line_itemsNCorder_line_itemsO6>TC order_line_itemsorder_id C % B # % MC*An order must have at least one line item.0Tasmanian TradersxTC  %%C  `%CpaidordersC2COrdersꐯ  C9@ frmordhistory )TC C 6% TC1Customer is over their maximimun order amount by $CCCZC  Save anyway?$Tasmanian TradersxT %`%CpaidordersC2COrdersꐯ  C9@ frmordhistory TC]%Qtastrade!customer"%C  customer_i!TC.min_order_amt Q% zTC&Customer order total must be at least $CCZC  Save anyway?$Tasmanian TradersxT %Q  F BULLRETVALLNANSWERLLCLOSE LNOLDRECNO LNORDERTOTAL LNOLDAREALCCUSTOMERALIASLYMINORDAMOUNT LYORDERAMOUNTTASTRADEORDERSORDER_IDORDER_LINE_ITEMS PRODUCT_IDCALCMINORDAMOUNT CUSTOMER_ID ACTIVEFORMNAMELYREMAININGCREDITREMAININGCREDITPAID  %Corder_line_items b%Qtastrade!order_line_items TaFTCC+CO69K ( {Gz?% # %Q BU TCORDERID LYORDERTOTALLLCLOSETASTRADEORDER_LINE_ITEMS LNOLDRECNO UNIT_PRICEQUANTITYORDERSDISCOUNTORDER_ID" %Corder_line_items f%Qtastrade!order_line_items Ta TCWFTCC+CO69K ( {Gz?% # %Q F  BU TCORDERID LYORDERTOTALLLCLOSELISELECTTASTRADEORDER_LINE_ITEMS LNOLDRECNO UNIT_PRICEQUANTITYORDERSDISCOUNTORDER_ID T%CoAppbO=TC%C"Qtastrade!employeeTQ BU LCEMPLOYEEIDOAPP GETEMPLOYEEIDTASTRADEEMP EMPLOYEE_ID Ta%CC' CS 9 T-g %C' cT Z#CO BULLRETVALPNERROR Ta%CCS @ T-%C53TCCCtcCascadeParentbC6f>T Z#CO BU TCFIELDNAME TCNEWVALUETCCASCADEPARENTLLRETVALPCCASCADEPARENTPNERROR'4 TC+%CgaErrors[lnErrorRows,1]bLCTTTTT T+CCt O,TC,CtTTTT T T  T  T  T  BUTNERRNO TCMESSAGETCCODE TCPROGRAM LNERRORROWSLNXXGAERRORS PCPARENTDBF PNPARENTREC PCPARENTID PCPARENTEXPR PCCHILDDBF PNCHILDREC PCCHILDID PCCHILDEXPR 4TC*%  TCWF TCW%C %Q__riCCCWZAQ__riCCCWZA% TCf?CCWZ T!TCCC>\g5TCCf*CZCf?CZ%C G((% T BUTCTABLETCORDER LCCURWKAREA LCNEWWKAREA LNINUSESPOT PCRICURSORSPNERROR4 %(@GG %C[{~ON ERROR &pcRIolderror. (C*TC*QCC\g%ONGA %OFF G%ON&G % ONCG2  HT C iG( C G( BaU TLSUCCESSLNXXLNSPOT LCWORKAREA PCRIOLDERROR PCRICURSORS PCOLDCOMPAT PCOLDDELE PCOLDEXACT PCOLDTALKPCOLDDBCJ 45TCCf?CZCf*CZBaU TCTABLENAMETCWKAREA PCRICURSORS Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T CATEGORY_ID&TCproducts category_i%%= -B-TC&TC F TCO TT CATEGORY_ID% >Delete restrict rule violated.Cproducts% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA CATEGORY_IDRIOPENRIENDRIERRORRIREUSEZ Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOTC CATEGORY_ID_ TT CATEGORY_ID T%!TCproducts%%=  - FB-TC& F~ TCO TT CATEGORY_ID% !+TC CATEGORY_IDCATEGORYCproducts% %=  F B%=@  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA CATEGORY_IDRIOPENRIENDRIUPDATERIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T CUSTOMER_ID$TCorders customer_i%%= -B-TC&TC F TCO TT CUSTOMER_ID% >Delete restrict rule violated.Corders% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA CUSTOMER_IDRIOPENRIENDRIERRORRIREUSEV Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOTC CUSTOMER_ID_ TT CUSTOMER_ID T%TCorders%%= - FB-TC& F~ TCO TT CUSTOMER_ID% !+TC CUSTOMER_IDCUSTOMERCorders% %=  F B%=<  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA CUSTOMER_IDRIOPENRIENDRIUPDATERIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T EMPLOYEE_ID$TCorders employee_i%%= -B-TC&TC F TCO TT EMPLOYEE_ID% >Delete restrict rule violated.Corders% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA EMPLOYEE_IDRIOPENRIENDRIERRORRIREUSEg Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCWD%=CpccascadeparentbC  USER_LEVEL  E F TTCGROUP_ID_TC&TCO TTGROUP_ID%A&TC user_levelgroup_id%p%=[ - FB-TC&TCTCOC user_level% =>Insert restrict rule violated.%=&  F B T F TC& TCOTC EMPLOYEE_ID_ TT EMPLOYEE_ID T %.TCorders%.%= - FB-TC& F~  TCO T T EMPLOYEE_ID% !+TC EMPLOYEE_IDEMPLOYEE!Corders% *%=  F B%=M  F BU"LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAPCCASCADEPARENTGROUP_IDRIOPENRIENDRIREUSERIERROR EMPLOYEE_IDRIUPDATE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TTC&TCO TTGROUP_ID&TC user_levelgroup_id%%= - FB-TC&TCTCOC user_level% >Insert restrict rule violated.%=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCCHILDIDLCPARENTWKAREA LCCHILDWKAREA LCSTARTAREAGROUP_IDRIOPENRIENDRIREUSERIERROR Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCWB%=CpccascadeparentbC PRODUCTS  E F TTC PRODUCT_ID_TC&TCO TT PRODUCT_ID%A&TCproducts product_id%r%=] - FB-TC&TCTCOCproducts% =>Insert restrict rule violated.%=&  F B@%=CpccascadeparentbC ORDERS  = F T TCORDER_ID_TC&TCO TTORDER_ID%9"TCordersorder_id%l%=W - FB-TC&TCTCOCorders% 5>Insert restrict rule violated.%=  F B T%=i  F BU!LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAPCCASCADEPARENT PRODUCT_IDRIOPENRIENDRIREUSERIERRORORDER_ID{ Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TTC&TCO TT PRODUCT_ID&TCproducts product_id%%= - FB-TC&TCTCOCproducts% >Insert restrict rule violated.%=  F B F TTC&TCO TTORDER_ID"TCordersorder_id%y%=d - FB-TC&TCTCOCorders% B>Insert restrict rule violated.%=+  F B%=a  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCCHILDIDLCPARENTWKAREA LCCHILDWKAREA LCSTARTAREA PRODUCT_IDRIOPENRIENDRIREUSERIERRORORDER_ID Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(TORDER_ID,TCorder_line_itemsorder_id%%= -B-TC& F E~+ V TCO TTORDER_IDTC!Corder_line_items% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREAORDER_IDRIOPENRIENDRIDELETERIREUSEy  Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCWB%=CpccascadeparentbC CUSTOMER  G F TTC CUSTOMER_ID_TC&TCO TT CUSTOMER_ID%C&TCcustomer customer_i%t%=_ - FB-TC&TCTCOCcustomer% ?>Insert restrict rule violated.%=(  F BB%=CpccascadeparentbC SHIPPERS  K F T TC SHIPPER_ID_TC&TCO TT SHIPPER_ID%G&TCshippers shipper_id%x%=c - FB-TC&TCTCOCshippers% C>Insert restrict rule violated.%=,  F BB%=CpccascadeparentbC EMPLOYEE  Q F T!TC EMPLOYEE_ID_TC&TCO TT EMPLOYEE_ID%M&TCemployee employee_i%~%=i - FB-TC&TCTCOCemployee% I>Insert restrict rule violated.%=2  F B T F TC& TCOTCORDER_ID_ TTORDER_ID T"%@ !TCorder_line_items%> %=) - FB-TC& F~" TCO T"TORDER_ID%  !&TCORDER_IDORDERS#!Corder_line_items% < %=%  F B%=_  F BU$LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAPCCASCADEPARENT CUSTOMER_IDRIOPENRIENDRIREUSERIERROR SHIPPER_ID EMPLOYEE_IDORDER_IDRIUPDATE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TTC&TCO TT CUSTOMER_ID&TCcustomer customer_i%%= - FB-TC&TCTCOCcustomer% >Insert restrict rule violated.%=  F B F TTC&TCO TT SHIPPER_ID&TCshippers shipper_id%%=k - FB-TC&TCTCOCshippers% K>Insert restrict rule violated.%=4  F B F TTC&TCO TT EMPLOYEE_ID&TCemployee employee_i%%= - FB-TC&TCTCOCemployee% >Insert restrict rule violated.%=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCCHILDIDLCPARENTWKAREA LCCHILDWKAREA LCSTARTAREA CUSTOMER_IDRIOPENRIENDRIREUSERIERROR SHIPPER_ID EMPLOYEE_ID) Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T PRODUCT_ID.TCorder_line_items product_id%%= -B-TC&TC F TCO TT PRODUCT_ID% >Delete restrict rule violated.!Corder_line_items% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA PRODUCT_IDRIOPENRIENDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCWB%=CpccascadeparentbC CATEGORY  G F TTC CATEGORY_ID_TC&TCO TT CATEGORY_ID%C&TCcategory category_i%t%=_ - FB-TC&TCTCOCcategory% ?>Insert restrict rule violated.%=(  F BB%=CpccascadeparentbC SUPPLIER  M F T TC SUPPLIER_ID_TC&TCO TT SUPPLIER_ID%I&TCsupplier supplier_i%z%=e - FB-TC&TCTCOCsupplier% E>Insert restrict rule violated.%=.  F B T F TC& TCOTC PRODUCT_ID_ TT PRODUCT_ID T!%F!TCorder_line_items%>%=) - FB-TC& F~! TCO T!T PRODUCT_ID% !*TC PRODUCT_IDPRODUCTS"!Corder_line_items% B%=+  F B%=e  F BU#LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAPCCASCADEPARENT CATEGORY_IDRIOPENRIENDRIREUSERIERROR SUPPLIER_ID PRODUCT_IDRIUPDATE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TTC&TCO TT CATEGORY_ID&TCcategory category_i%%= - FB-TC&TCTCOCcategory% >Insert restrict rule violated.%=  F B F TTC&TCO TT SUPPLIER_ID&TCsupplier supplier_i%%=l - FB-TC&TCTCOCsupplier% L>Insert restrict rule violated.%=5  F B%=k  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCCHILDIDLCPARENTWKAREA LCCHILDWKAREA LCSTARTAREA CATEGORY_IDRIOPENRIENDRIREUSERIERROR SUPPLIER_ID Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T SHIPPER_ID$TCorders shipper_id%%= -B-TC&TC F TCO TT SHIPPER_ID% >Delete restrict rule violated.Corders% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA SHIPPER_IDRIOPENRIENDRIERRORRIREUSER Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOTC SHIPPER_ID_ TT SHIPPER_ID T%TCorders%%= - FB-TC& F~ TCO TT SHIPPER_ID% !*TC SHIPPER_IDSHIPPERSCorders% %=  F B%=8  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA SHIPPER_IDRIOPENRIENDRIUPDATERIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(T SUPPLIER_ID&TCproducts supplier_i%%= -B-TC&TC F TCO TT SUPPLIER_ID% >Delete restrict rule violated.Cproducts% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA SUPPLIER_IDRIOPENRIENDRIERRORRIREUSEZ Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOTC SUPPLIER_ID_ TT SUPPLIER_ID T%!TCproducts%%=  - FB-TC& F~ TCO TT SUPPLIER_ID% !+TC SUPPLIER_IDSUPPLIERCproducts% %=  F B%=@  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA SUPPLIER_IDRIOPENRIENDRIUPDATERIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOJ(TGROUP_ID$TCemployeegroup_id%%= -B-TC&TC F TCO TTGROUP_ID% }>Delete restrict rule violated.Cemployee% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREAGROUP_IDRIOPENRIENDRIERRORRIREUSEP Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG(TASTRADE TCW Ta TCW F TC& TCOTCGROUP_ID_ TTGROUP_ID T%TCemployee%%= - FB-TC& F~ TCO TTGROUP_ID% !*TCGROUP_ID USER_LEVELCemployee% %=  F B%=6  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAGROUP_IDRIOPENRIENDRIUPDATERIREUSENewID,RemainingCreditValOrderCalcMinOrdAmount CalcOrdTotal DefaultEmployee RIDELETERIUPDATE8rierror^riopen1riendGrireuseX__RI_DELETE_category__RI_UPDATE_categoryB__RI_DELETE_customer#__RI_UPDATE_customer(__RI_DELETE_employeeP.__RI_UPDATE_employee3__RI_INSERT_employee;__RI_UPDATE_order_line_itemsA__RI_INSERT_order_line_itemsI__RI_DELETE_ordersO__RI_UPDATE_orders/U__RI_INSERT_ordersZa__RI_DELETE_productsi__RI_UPDATE_productsWo__RI_INSERT_products~y__RI_DELETE_shippers[__RI_UPDATE_shippers̅__RI_DELETE_supplier__RI_UPDATE_supplier __RI_DELETE_user_levelٖ__RI_UPDATE_user_levelF3q4AsRAq""AAA4q4AQA 4yAAaA2AAB5rv!AAQ!A!AAAAAA4qQAqAA5qQAqAA5qA!A7qAAA2qA1q1AA211A1A3qRAAR1AAA3qQaAaAAQA1aAAaA1aA1aAaAq3Rq4qQr1aaAaaaQqA1AAqqqqaAqA1AAAA5rQr1aaAaaaQqA1AAqqqqqqqAqA!AAAAAAA6qQr1aaAaaaQqA1AAqqqqAAqA1AqAAA5rQr1aaAaaaQqA1AAqqqqqqqqAqA!AAAqAAAA6qQr1aaAaaaQqA1AAqqqqAAqA1AqAAA5rQr1aaAaaaQqA1AAqqqqqqqAQaAqA!AAAAqAqA!AAAqAAAA6qQr1aaAaaaQqA1AAqqqqQaAqA!AAA5rQr1aaAaaaQqA1AAqqqqqqq!qaAqA!AAAAQ!AqA!qAAAAA6qQr1aaAaaaQqA1AAqqqqqaAqA!AAQ!AqA!qAAA6qQr1aaAaaaQqA1AAqqqqQAqAQAAAA5rQr1aaAaaaQqA1AAqqqqqqq!aAqA!AAAA!qaAqA!AAAA!aAqA!AAAAQAqA!QAAaAAAAA6qQr1aaAaaaQqA1AAqqqqaAqA!AAqaAqA!AAaAqA!AAA6qQr1aaAaaaQqA1AAqqqqqAqA1qAAAA5rQr1aaAaaaQqA1AAqqqqqqq!aAqA!AAAA!aAqA!AAAAqAqA!qAAAAAAA6qQr1aaAaaaQqA1AAqqqqaAqA!AAaAqA!AAA6qQr1aaAaaaQqA1AAqqqqqAAqA1qAqAAA5rQr1aaAaaaQqA1AAqqqqqqqqqAqA!qAAAqAAAA6qQr1aaAaaaQqA1AAqqqqaAqA1AAAA5rQr1aaAaaaQqA1AAqqqqqqqAqA!AAAAAAA6qQr1aaAaaaQqA1AAqqqqQAAqA1QAAAA5rQr1aaAaaaQqA1AAqqqqqqqQAqA!QAAAAAAA3"+0XbxszB !!0$2D$(O$(*p * ,+,"5WD5W@y@lIEIT@T]]Um5wm[v<vXiǞM'GwtMK0%6<A^U 8w  ~)( ).0$(,PQR / %d '+tastrade!orders*SELECT Orders.order_id, Orders.order_date, Orders.deliver_by, SUM((Orditems.unit_price*Orditems.quantity)-Orders.discount)*0.01*SUM((Orditems.unit_price*Orditems.quantity)+Orders.freight) AS ord_total, Orders.paid FROM tastrade!orders INNER JOIN tastrade!order_line_items Orditems ON Orders.order_id = Orditems.order_id WHERE Orders.customer_id = ( ?customer.customer_id ) GROUP BY Orders.order_id, Orders.order_date, Orders.deliver_by, Orders.paid ORDER BY Orders.order_date DESC)  customer_id,'C'.0$(,PQR / %d '5*SELECT TOP 25 Customer.customer_id, Customer.company_name, Customer.country, SUM(Ordertotal.ordertotal) AS custtotal FROM customer INNER JOIN tastrade!ordertotal ON Customer.customer_id = Ordertotal.customer_id GROUP BY Customer.customer_id, Customer.company_name, Customer.country ORDER BY 4 DESC) +tastrade!customer.0$(, / %d '!+tastrade!order_line_itemsb*SELECT .F., Products.product_name, Order_line_items.quantity, Order_line_items.unit_price, Order_line_items.unit_price*Order_line_items.quantity AS extension, Order_line_items.product_id FROM tastrade!order_line_items, tastrade!products WHERE Products.product_id = Order_line_items.product_id AND Order_line_items.order_id = ?orders.order_id) PQR)#INCLUDE TASTRADE.H FUNCTION NewID(tcAlias) LOCAL lcAlias, ; lcID, ; lcOldReprocess, ; lnOldArea lnOldArea = SELECT() IF PARAMETERS() < 1 lcAlias = UPPER(ALIAS()) ELSE lcAlias = UPPER(tcAlias) ENDIF lcID = "" lcOldReprocess = SET('REPROCESS') *-- Lock until user presses Esc SET REPROCESS TO AUTOMATIC IF !USED("SETUP") USE tastrade!setup IN 0 ENDIF SELECT setup IF SEEK(lcAlias, "setup", "key_name") IF RLOCK() lcID = setup.value REPLACE setup.value WITH ; STR(VAL(ALLT(lcID)) + 1, LEN(setup.value)) UNLOCK ENDIF ENDIF SELECT (lnOldArea) SET REPROCESS TO lcOldReprocess RETURN lcID ENDFUNC ****************** FUNCTION RemainingCredit(tcCustomerID) LOCAL lyMaxOrderAmount, ; lyTotalOrders, ; lcCustomerAlias, ; lnOldArea IF PARAMETERS() < 1 OR EMPTY(tcCustomerID) RETURN 0 ENDIF lyMaxOrderAmount = 0 lnOldArea = SELECT(0) lcCustomerAlias = SYS(2015) USE tastrade!customer AGAIN IN 0 ALIAS (lcCustomerAlias) IF SEEK(tcCustomerID, lcCustomerAlias, "customer_i") lyMaxOrderAmount = EVAL(lcCustomerAlias + ".max_order_amt") ENDIF USE IN (lcCustomerAlias) *-- We use the orders table again to avoid "Illegal *-- recursion" errors. USE tastrade!orders AGAIN ALIAS _orders IN 0 SELECT SUM((b.unit_price * b.quantity) - ; (a.discount * .01) * (b.unit_price * b.quantity) + a.freight) AS totalorder, a.order_id ; FROM _orders a, order_line_items b ; WHERE a.order_id = b.order_id AND ; a.customer_id = tcCustomerID AND ; !a.paid ; GROUP by a.order_id ; INTO CURSOR orderamounts SUM totalorder to lyTotalOrders USE IN _orders USE IN orderamounts SELECT (lnOldArea) RETURN lyMaxOrderAmount - lyTotalOrders ENDFUNC ****************** FUNCTION ValOrder() LOCAL llRetVal, ; lnAnswer, ; llClose, ; lnOldRecNo, ; lnOrderTotal, ; lnOldArea, ; lcCustomerAlias, ; lyMinOrdAmount, ; lyOrderAmount *-- Don't bother checking if we're deleting the order IF DELETED() RETURN ENDIF lnOldArea = SELECT() *-- Check if we have at least one line item. Use the current *-- table if order_line_items is already opened to include *-- buffered records. IF !USED("order_line_items") USE tastrade!order_line_items AGAIN IN 0 llClose = .T. ENDIF lnOldRecNo = IIF(RECCOUNT("order_line_items") > 0, RECNO("order_line_items"), 0) llRetVal = (SEEK(orders.order_id, "order_line_items", "order_id") AND ; !EMPTY(order_line_items.product_id)) IF lnOldRecNo <> 0 AND llRetVal GO lnOldRecNo IN order_line_items ENDIF IF !llRetVal =MESSAGEBOX(ORDHASITEMS_LOC, ; MB_ICONEXCLAMATION, ; TASTRADE_LOC) ENDIF lyOrderAmount = CalcMinOrdAmount(orders.order_id) IF llRetVal *-- Check if customer is over credit limit. If *-- customer id is empty, the order will not be saved *-- because customer_id is a required foreign key, enforced *-- by the RI triggers, so we don't even bother checking. IF !EMPTY(orders.customer_id) IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ; LOWER(_screen.ActiveForm.Name) # "frmordhistory" *- didn't just change paid, and isn't on order history screen LOCAL lyRemainingCredit lyRemainingCredit = RemainingCredit(orders.customer_id) + IIF(orders.paid, lyOrderAmount, 0) IF lyRemainingCredit < $0 lnAnswer = ; MESSAGEBOX(CUSTOVERMAX_LOC + ; DOLLAR_FORMAT3_LOC + ALLT(STR(ABS(lyRemainingCredit), 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ; SAVEANYWAY_LOC, ; MB_ICONQUESTION + MB_YESNO, ; TASTRADE_LOC) llRetVal = (lnAnswer = IDYES) ENDIF ENDIF IF llRetVal *-- Get the customer's minimum order amount IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ; LOWER(_screen.ActiveForm.Name) # "frmordhistory" lcCustomerAlias = SYS(2015) USE tastrade!customer AGAIN IN 0 ALIAS (lcCustomerAlias) IF SEEK(orders.customer_id, lcCustomerAlias, "customer_i") lyMinOrdAmount = EVAL(lcCustomerAlias + ".min_order_amt") ENDIF USE IN (lcCustomerAlias) IF lyOrderAmount < lyMinOrdAmount lnAnswer = ; MESSAGEBOX(CUSTUNDERMIN_LOC + ; DOLLAR_FORMAT3_LOC + ALLT(STR(lyMinOrdAmount, 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ; SAVEANYWAY_LOC, ; MB_ICONQUESTION + MB_YESNO, ; TASTRADE_LOC) llRetVal = (lnAnswer = IDYES) ENDIF ENDIF ENDIF ENDIF && marked as paid only ENDIF IF llClose USE IN order_line_items ENDIF SELECT (lnOldArea) RETURN llRetVal ENDFUNC ****************** FUNCTION CalcMinOrdAmount(tcOrderID) *-- Returns order amount *-- Assumes orders table is open and positioned on desired record LOCAL lyOrderTotal, ; llClose IF !USED("order_line_items") USE tastrade!order_line_items IN 0 llClose = .T. ENDIF SELECT order_line_items lnOldRecNo = IIF(EOF(), 0, RECNO()) SUM (unit_price * quantity) - ; (orders.discount * .01) * (unit_price * quantity) ; FOR order_id = tcOrderID ; TO lyOrderTotal IF lnOldRecNo <> 0 GO lnOldRecNo IN order_line_items ENDIF IF llClose USE IN order_line_items ENDIF RETURN lyOrderTotal ENDFUNC ****************** FUNCTION CalcOrdTotal(tcOrderID) *-- Returns total of order, after discount *-- Assumes orders table is open and positioned on desired record LOCAL lyOrderTotal, ; llClose,; liSelect IF !USED("order_line_items") USE tastrade!order_line_items IN 0 llClose = .T. ENDIF liSelect = SELECT() SELECT order_line_items lnOldRecNo = IIF(EOF(), 0, RECNO()) SUM (unit_price * quantity) - ; (orders.discount * .01) * (unit_price * quantity) ; FOR order_id = tcOrderID ; TO lyOrderTotal IF lnOldRecNo <> 0 GO lnOldRecNo IN order_line_items ENDIF IF llClose USE IN order_line_items ENDIF SELECT (m.liSelect) RETURN lyOrderTotal ENDFUNC ****************** FUNCTION DefaultEmployee() LOCAL lcEmployeeID *-- An order must have an employee ID associated with it *-- For the purposes of this sample application, we will *-- attempt to use the employee ID for the currently logged in *-- employee. If the oApp object does not exist (i.e., we are not *-- running the application), we will attempt to retrieve an arbitrary *-- employee ID from the employee file lcEmployeeID = "" IF TYPE("oApp") == "O" lcEmployeeID = oApp.GetEmployeeID() ENDIF IF EMPTY(lcEmployeeID) USE tastrade!employee AGAIN IN 0 ALIAS emp lcEmployeeID = emp.employee_id USE IN emp ENDIF RETURN lcEmployeeID ENDFUNC *--------------------------------------------------------------------- **__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER** procedure RIDELETE local llRetVal llRetVal=.t. IF (ISRLOCKED() and !deleted()) OR !RLOCK() llRetVal=.F. ELSE IF !deleted() DELETE llRetVal=pnerror=0 ENDIF not already deleted ENDIF UNLOCK RECORD (RECNO()) RETURN llRetVal procedure RIUPDATE lparameters tcFieldName,tcNewValue,tcCascadeParent local llRetVal llRetVal=.t. IF ISRLOCKED() OR !RLOCK() llRetVal=.F. ELSE IF EVAL(tcFieldName)<>tcNewValue PRIVATE pcCascadeParent pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent)) REPLACE (tcFieldName) WITH tcNewValue llRetVal=pnerror=0 ENDIF values don't already match ENDIF it's locked already, or I was able to lock it UNLOCK RECORD (RECNO()) return llRetVal procedure rierror parameters tnErrNo,tcMessage,tcCode,tcProgram local lnErrorRows,lnXX lnErrorRows=alen(gaErrors,1) if type('gaErrors[lnErrorRows,1]')<>"L" dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)] lnErrorRows=lnErrorRows+1 endif gaErrors[lnErrorRows,1]=tnErrNo gaErrors[lnErrorRows,2]=tcMessage gaErrors[lnErrorRows,3]=tcCode gaErrors[lnErrorRows,4]="" lnXX=1 do while !empty(program(lnXX)) gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+; program(lnXX) lnXX=lnXX+1 enddo gaErrors[lnErrorRows,5]=pcParentDBF gaErrors[lnErrorRows,6]=pnParentRec gaErrors[lnErrorRows,7]=pcParentID gaErrors[lnErrorRows,8]=pcParentExpr gaErrors[lnErrorRows,9]=pcChildDBF gaErrors[lnErrorRows,10]=pnChildRec gaErrors[lnErrorRows,11]=pcChildID gaErrors[lnErrorRows,12]=pcChildExpr return tnErrNo PROCEDURE riopen PARAMETERS tcTable,tcOrder local lcCurWkArea,lcNewWkArea,lnInUseSpot lnInUseSpot=atc(tcTable+"*",pcRIcursors) IF lnInUseSpot=0 lcCurWkArea=select() SELECT 0 lcNewWkArea=select() IF NOT EMPTY(tcOrder) USE (tcTable) AGAIN ORDER (tcOrder) ; ALIAS ("__ri"+LTRIM(STR(SELECT()))) share ELSE USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share ENDIF if pnerror=0 pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5) else lcNewWkArea=0 endif something bad happened while attempting to open the file ELSE lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5)) pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),; upper(tcTable)+"?"+str(lcNewWkArea,5)) IF NOT EMPTY(tcOrder) SET ORDER TO (tcOrder) IN (lcNewWkArea) ENDIF sent an order if pnerror<>0 lcNewWkArea=0 endif something bad happened while setting order ENDIF RETURN (lcNewWkArea) PROCEDURE riend PARAMETERS tlSuccess local lnXX,lnSpot,lcWorkArea IF tlSuccess END TRANSACTION ELSE SET DELETED OFF ROLLBACK SET DELETED ON ENDIF IF EMPTY(pcRIolderror) ON ERROR ELSE ON ERROR &pcRIolderror. ENDIF FOR lnXX=1 TO occurs("*",pcRIcursors) lnSpot=atc("*",pcRIcursors,lnXX)+1 USE IN (VAL(substr(pcRIcursors,lnSpot,5))) ENDFOR IF pcOldCompat = "ON" SET COMPATIBLE ON ENDIF IF pcOldDele="OFF" SET DELETED OFF ENDIF IF pcOldExact="ON" SET EXACT ON ENDIF IF pcOldTalk="ON" SET TALK ON ENDIF do case case empty(pcOldDBC) set data to case pcOldDBC<>DBC() set data to (pcOldDBC) endcase RETURN .T. PROCEDURE rireuse * rireuse.prg PARAMETERS tcTableName,tcWkArea pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),; upper(tcTableName)+"*"+str(tcWkArea,5)) RETURN .t. ******************************************************************************** ** "Referential integrity delete trigger for" category PROCEDURE __RI_DELETE_category LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE CATEGORY_ID TO lcParentID,pcParentID pcParentExpr="CATEGORY_ID" lcChildWkArea=riopen("products","category_i") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=CATEGORY_ID pcChildExpr="CATEGORY_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" category ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_category ** "Referential integrity update trigger for" category LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("CATEGORY_ID") pcParentID=lcOldParentID pcParentExpr="CATEGORY_ID" lcParentID=CATEGORY_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("products") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR CATEGORY_ID=lcOldParentID pnChildRec=recno() pcChildID=CATEGORY_ID pcChildExpr="CATEGORY_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("CATEGORY_ID",lcParentID,"CATEGORY") ENDSCAN get all of the products records =rireuse("products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" category ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" customer PROCEDURE __RI_DELETE_customer LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE CUSTOMER_ID TO lcParentID,pcParentID pcParentExpr="CUSTOMER_ID" lcChildWkArea=riopen("orders","customer_i") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=CUSTOMER_ID pcChildExpr="CUSTOMER_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" customer ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_customer ** "Referential integrity update trigger for" customer LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("CUSTOMER_ID") pcParentID=lcOldParentID pcParentExpr="CUSTOMER_ID" lcParentID=CUSTOMER_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR CUSTOMER_ID=lcOldParentID pnChildRec=recno() pcChildID=CUSTOMER_ID pcChildExpr="CUSTOMER_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("CUSTOMER_ID",lcParentID,"CUSTOMER") ENDSCAN get all of the orders records =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" customer ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" employee PROCEDURE __RI_DELETE_employee LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE EMPLOYEE_ID TO lcParentID,pcParentID pcParentExpr="EMPLOYEE_ID" lcChildWkArea=riopen("orders","employee_i") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=EMPLOYEE_ID pcChildExpr="EMPLOYEE_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" employee ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_employee ** "Referential integrity update trigger for" employee LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=select() IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="USER_LEVEL") SELECT (lcChildWkArea) lcChildID=GROUP_ID lcOldChildID=oldval("GROUP_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="GROUP_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("user_level","group_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("user_level",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "user_level" lcParentWkArea=lcChildWkArea SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("EMPLOYEE_ID") pcParentID=lcOldParentID pcParentExpr="EMPLOYEE_ID" lcParentID=EMPLOYEE_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR EMPLOYEE_ID=lcOldParentID pnChildRec=recno() pcChildID=EMPLOYEE_ID pcChildExpr="EMPLOYEE_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("EMPLOYEE_ID",lcParentID,"EMPLOYEE") ENDSCAN get all of the orders records =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" employee ******************************************************************************** ******************************************************************************** ** "Referential integrity insert trigger for" employee PROCEDURE __RI_INSERT_employee LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcChildID && child's value to be sought in parent LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcChildWkArea && child's work area LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=SELECT() SELECT (lcChildWkArea) lcChildID=GROUP_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="GROUP_ID" lcParentWkArea=riopen("user_level","group_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("user_level",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity insert trigger for" employee ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_order_line_items ** "Referential integrity update trigger for" order_line_items LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=select() IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="PRODUCTS") SELECT (lcChildWkArea) lcChildID=PRODUCT_ID lcOldChildID=oldval("PRODUCT_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="PRODUCT_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("products","product_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("products",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "products" IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="ORDERS") SELECT (lcChildWkArea) lcChildID=ORDER_ID lcOldChildID=oldval("ORDER_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="ORDER_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("orders","order_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("orders",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "orders" lcParentWkArea=lcChildWkArea IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" order_line_items ******************************************************************************** ******************************************************************************** ** "Referential integrity insert trigger for" order_line_items PROCEDURE __RI_INSERT_order_line_items LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcChildID && child's value to be sought in parent LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcChildWkArea && child's work area LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=SELECT() SELECT (lcChildWkArea) lcChildID=PRODUCT_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="PRODUCT_ID" lcParentWkArea=riopen("products","product_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("products",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcChildWkArea) lcChildID=ORDER_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="ORDER_ID" lcParentWkArea=riopen("orders","order_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("orders",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity insert trigger for" order_line_items ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" orders PROCEDURE __RI_DELETE_orders LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE ORDER_ID TO lcParentID,pcParentID pcParentExpr="ORDER_ID" lcChildWkArea=riopen("order_line_items","order_id") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SEEK lcParentID SCAN WHILE ORDER_ID=lcParentID AND llRetVal pnChildRec=recno() pcChildID=ORDER_ID pcChildExpr="ORDER_ID" llRetVal=ridelete() ENDSCAN get all of the order_line_items records =rireuse("order_line_items",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" orders ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_orders ** "Referential integrity update trigger for" orders LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=select() IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="CUSTOMER") SELECT (lcChildWkArea) lcChildID=CUSTOMER_ID lcOldChildID=oldval("CUSTOMER_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="CUSTOMER_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("customer","customer_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("customer",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "customer" IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="SHIPPERS") SELECT (lcChildWkArea) lcChildID=SHIPPER_ID lcOldChildID=oldval("SHIPPER_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="SHIPPER_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("shippers","shipper_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("shippers",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "shippers" IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="EMPLOYEE") SELECT (lcChildWkArea) lcChildID=EMPLOYEE_ID lcOldChildID=oldval("EMPLOYEE_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="EMPLOYEE_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("employee","employee_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("employee",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "employee" lcParentWkArea=lcChildWkArea SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("ORDER_ID") pcParentID=lcOldParentID pcParentExpr="ORDER_ID" lcParentID=ORDER_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("order_line_items") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR ORDER_ID=lcOldParentID pnChildRec=recno() pcChildID=ORDER_ID pcChildExpr="ORDER_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("ORDER_ID",lcParentID,"ORDERS") ENDSCAN get all of the order_line_items records =rireuse("order_line_items",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" orders ******************************************************************************** ******************************************************************************** ** "Referential integrity insert trigger for" orders PROCEDURE __RI_INSERT_orders LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcChildID && child's value to be sought in parent LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcChildWkArea && child's work area LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=SELECT() SELECT (lcChildWkArea) lcChildID=CUSTOMER_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="CUSTOMER_ID" lcParentWkArea=riopen("customer","customer_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("customer",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcChildWkArea) lcChildID=SHIPPER_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="SHIPPER_ID" lcParentWkArea=riopen("shippers","shipper_id") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("shippers",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcChildWkArea) lcChildID=EMPLOYEE_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="EMPLOYEE_ID" lcParentWkArea=riopen("employee","employee_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("employee",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity insert trigger for" orders ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" products PROCEDURE __RI_DELETE_products LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE PRODUCT_ID TO lcParentID,pcParentID pcParentExpr="PRODUCT_ID" lcChildWkArea=riopen("order_line_items","product_id") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=PRODUCT_ID pcChildExpr="PRODUCT_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("order_line_items",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" products ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_products ** "Referential integrity update trigger for" products LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=select() IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="CATEGORY") SELECT (lcChildWkArea) lcChildID=CATEGORY_ID lcOldChildID=oldval("CATEGORY_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="CATEGORY_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("category","category_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("category",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "category" IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="SUPPLIER") SELECT (lcChildWkArea) lcChildID=SUPPLIER_ID lcOldChildID=oldval("SUPPLIER_ID") pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcOldChildID pcChildExpr="SUPPLIER_ID" IF lcChildID<>lcOldChildID lcParentWkArea=riopen("supplier","supplier_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("supplier",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF no parent ENDIF this value was changed ENDIF not part of a cascade from "supplier" lcParentWkArea=lcChildWkArea SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("PRODUCT_ID") pcParentID=lcOldParentID pcParentExpr="PRODUCT_ID" lcParentID=PRODUCT_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("order_line_items") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR PRODUCT_ID=lcOldParentID pnChildRec=recno() pcChildID=PRODUCT_ID pcChildExpr="PRODUCT_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("PRODUCT_ID",lcParentID,"PRODUCTS") ENDSCAN get all of the order_line_items records =rireuse("order_line_items",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" products ******************************************************************************** ******************************************************************************** ** "Referential integrity insert trigger for" products PROCEDURE __RI_INSERT_products LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcChildID && child's value to be sought in parent LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcChildWkArea && child's work area LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcChildWkArea=SELECT() SELECT (lcChildWkArea) lcChildID=CATEGORY_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="CATEGORY_ID" lcParentWkArea=riopen("category","category_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("category",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcChildWkArea) lcChildID=SUPPLIER_ID pcChildDBF=dbf(lcChildWkArea) pnChildRec=recno(lcChildWkArea) pcChildID=lcChildID pcChildExpr="SUPPLIER_ID" lcParentWkArea=riopen("supplier","supplier_i") IF lcParentWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcParentDBF=dbf(lcParentWkArea) llRetVal=SEEK(lcChildID,lcParentWkArea) pnParentRec=recno(lcParentWkArea) =rireuse("supplier",lcParentWkArea) IF NOT llRetVal DO rierror with -1,"Insert restrict rule violated.","","" IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity insert trigger for" products ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" shippers PROCEDURE __RI_DELETE_shippers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE SHIPPER_ID TO lcParentID,pcParentID pcParentExpr="SHIPPER_ID" lcChildWkArea=riopen("orders","shipper_id") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=SHIPPER_ID pcChildExpr="SHIPPER_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" shippers ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_shippers ** "Referential integrity update trigger for" shippers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("SHIPPER_ID") pcParentID=lcOldParentID pcParentExpr="SHIPPER_ID" lcParentID=SHIPPER_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR SHIPPER_ID=lcOldParentID pnChildRec=recno() pcChildID=SHIPPER_ID pcChildExpr="SHIPPER_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("SHIPPER_ID",lcParentID,"SHIPPERS") ENDSCAN get all of the orders records =rireuse("orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" shippers ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" supplier PROCEDURE __RI_DELETE_supplier LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE SUPPLIER_ID TO lcParentID,pcParentID pcParentExpr="SUPPLIER_ID" lcChildWkArea=riopen("products","supplier_i") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=SUPPLIER_ID pcChildExpr="SUPPLIER_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" supplier ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_supplier ** "Referential integrity update trigger for" supplier LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("SUPPLIER_ID") pcParentID=lcOldParentID pcParentExpr="SUPPLIER_ID" lcParentID=SUPPLIER_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("products") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR SUPPLIER_ID=lcOldParentID pnChildRec=recno() pcChildID=SUPPLIER_ID pcChildExpr="SUPPLIER_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("SUPPLIER_ID",lcParentID,"SUPPLIER") ENDSCAN get all of the products records =rireuse("products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" supplier ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" user_level PROCEDURE __RI_DELETE_user_level LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE GROUP_ID TO lcParentID,pcParentID pcParentExpr="GROUP_ID" lcChildWkArea=riopen("employee","group_id") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=GROUP_ID pcChildExpr="GROUP_ID" IF !llRetVal DO rierror with -1,"Delete restrict rule violated.","","" ENDIF =rireuse("employee",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" user_level ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_user_level ** "Referential integrity update trigger for" user_level LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("TASTRADE") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("GROUP_ID") pcParentID=lcOldParentID pcParentExpr="GROUP_ID" lcParentID=GROUP_ID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("employee") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR GROUP_ID=lcOldParentID pnChildRec=recno() pcChildID=GROUP_ID pcChildExpr="GROUP_ID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("GROUP_ID",lcParentID,"USER_LEVEL") ENDSCAN get all of the employee records =rireuse("employee",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" user_level ******************************************************************************** **__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER** .0$(,PQR / %d '1*SELECT Orders.customer_id, SUM(Orditems.unit_price*Orditems.quantity-(0.01*Orders.discount*Orditems.unit_price*Orditems.quantity)+Orders.freight) AS ordertotal FROM tastrade!orders INNER JOIN tastrade!order_line_items Orditems ON Orders.order_id = Orditems.order_id GROUP BY Orders.customer_id) +tastrade!orders